"""
Definition: 工厂方法模式（Factory Method Pattern）：是一种将工厂类抽象化改进，将实际创建对象的工作推迟到子类中完成。
            可以在不修改工厂类的情况下，增加新的产品系列和产品等级结构。（简单而言：工厂类抽象化，将增改操作下发给子类）
Scene: 工厂方法模式适用于对象数量较多且产品等级结构较为复杂的情况。

Characters: 工厂角色（Factory） 具体工厂角色（Concrete Factory） 抽象产品角色（Product） 具体产品角色（Concrete Product）

Code: Product、ConcreteProductA 和 ConcreteProductB 的定义与简单工厂模式的例子相同。不同之处在于，Factory 变成了一个抽象基类，
其中的 create_product() 方法变成了抽象方法。ConcreteFactoryA 和 ConcreteFactoryB 是具体的工厂类，
分别实现了 Factory 类的 create_product() 方法来创建不同的产品实例。
"""


class Product:
    def use(self):
        pass


class ConcreteProductA(Product):
    def use(self):
        print("Using product A.")


class ConcreteProductB(Product):
    def use(self):
        print("Using product B.")


class Factory:
    def create_product(self):
        pass


class ConcreteFactoryA(Factory):
    def create_product(self):
        return ConcreteProductA()


class ConcreteFactoryB(Factory):
    def create_product(self):
        return ConcreteProductB()


factory_a = ConcreteFactoryA()
product_a = factory_a.create_product()
product_a.use()  # 输出：Using product A.

factory_b = ConcreteFactoryB()
product_b = factory_b.create_product()
product_b.use()  # 输出：Using product B.
